/*
 * Copyright (c) 2009, Balazs Lecz <leczbalazs@gmail.com>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 * 
 *     * Redistributions in binary form must reproduce the above copyright notice,
 *       this list of conditions and the following disclaimer in the documentation
 *       and/or other materials provided with the distribution.
 * 
 *     * Neither the name of Balazs Lecz nor the names of
 *       contributors may be used to endorse or promote products derived from this
 *       software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 */

package com.lecz.android.checklists;

import android.app.ExpandableListActivity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.SimpleCursorTreeAdapter;


public class CheckListsActivity extends ExpandableListActivity {
	private ChecklistDBAdapter mDB;
	private Cursor mChecklistGroupsCursor;
	private ExpandableListAdapter mAdapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);		
		
		setTitle(R.string.title);

		mDB = new ChecklistDBAdapter(this).open();
		
		mChecklistGroupsCursor = mDB.getChecklistGroups();
		startManagingCursor(mChecklistGroupsCursor);
		
		mAdapter = new CheckListsListAdapter(
				this,
				mChecklistGroupsCursor,
				android.R.layout.simple_expandable_list_item_1,
				android.R.layout.simple_expandable_list_item_1,
	            new String[] {ChecklistDBAdapter.KEY_CHECKLIST_GROUPS_NAME},
	            new int[] {android.R.id.text1},
	            android.R.layout.simple_expandable_list_item_2,
	            new String[] {ChecklistDBAdapter.KEY_CHECKLISTS_NAME},
	            new int[] {android.R.id.text1}
	        );

		setListAdapter(mAdapter);
		
		int groupCount = mAdapter.getGroupCount();
		ExpandableListView listView = getExpandableListView();
		for (int i = 0; i < groupCount; i++) {
			listView.expandGroup(i);
		}
	}
	
	@Override
	public boolean onChildClick(ExpandableListView parent, View v,
			int groupPosition, int childPosition, long id) {
		Intent intent = new Intent(this, ExecuteCheckListActivity.class);
		intent.putExtra("checklist_id", id);
		startActivity(intent);
		
		return true;
	}
	
	public class CheckListsListAdapter extends SimpleCursorTreeAdapter {
		private Cursor mChecklistsCursor;
		
		public CheckListsListAdapter(
				Context context,
				Cursor cursor,
				int collapsedGroupLayout,
				int expandedGroupLayout,
				String[] groupFrom,
				int[] groupTo,
				int childLayout,
				String[] childFrom,
				int[] childTo) {
			super(context, cursor, collapsedGroupLayout, expandedGroupLayout, groupFrom,
					groupTo, childLayout, childFrom, childTo);
		}

		@Override
		protected Cursor getChildrenCursor(Cursor groupCursor) {
			mChecklistsCursor = mDB.getChecklists(groupCursor.getLong(ChecklistDBAdapter.COLUMN_ID));
			startManagingCursor(mChecklistsCursor);
			
			return mChecklistsCursor;
		}
		
	}
}